/*    
    OpenMheg - A free MHEG-5 library
    Copyright (C) 2008 Dharmesh Malam

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using Core.Model.Data;
using Core.Model.Ingredients;
using Parser;

namespace XMHEGDecoder.Builders
{
    public class IngredientBuilder
    {

        public static void Build ( XmlElement node, Ingredient ingredient )
        {
            //  Build root object
            RootBuilder.Build( node[ "root" ], ingredient );
            if ( ingredient.ObjectIdentifier.ObjectNumber == 0 )
            {
                throw new Exception( "Ingredient parsed with invalid object number 0" );
                //log.warning( "Ingredient parsed with invalid object number 0" );
            }

            #region  Build our attributes

            XmlElement e;
            
            e = node[ "initially-active" ];
            if ( e != null )
                ingredient.InitiallyActive = DecodeUtils.ParseBool( e.InnerText );

            e = node[ "content-hook"];
            if ( e != null )
                ingredient.ContentHook = DecodeUtils.ParseInt( e.InnerText );

            e = node[ "original-content" ];
            if ( e != null )
                ingredient.OriginalContent = BuildContent( e );

            e = node[ "shared" ];
            if ( e != null )
                ingredient.Shared = DecodeUtils.ParseBool( e.InnerText );

            #endregion

        }

        private static Content BuildContent ( XmlElement node )
        {
            Content content = new Content(ContentRefBuilder.BuildContentBody( node ) );

            XmlElement e;

            if (( e = node ["content-cache-priority"]) != null)
                content.ContentCachePriority = DecodeUtils.ParseInt(e.InnerText);

            if (( e = node ["content-size"] ) != null)
                content.ContentSize = DecodeUtils.ParseInt(e.InnerText);

            return content;

        }
    }
}
